home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
9-Digit Zip Code Directory
/
9-Digit Zip Code Directory (American Business Information) (ABIZIP-12).ISO
/
z4src.zip
/
BSUMB.C
< prev
next >
Wrap
C/C++ Source or Header
|
1995-04-26
|
4KB
|
166 lines
//----------------------------------------------------------------------------
// MODULE DESCRIPTION
//
// Module: bsumb.c
// Title: Base library
// Notice: John M. Weeder
// Copyright (c) 1993. All rights reserved.
// This module contains proprietary information and should be
// treated as confidential.
//
//----------------------------------------------------------------------------
// MAINTENANCE HISTORY
//
// $Workfile$
// $Revision$
// $Author$
// $Date$
// $Log$
//
//----------------------------------------------------------------------------
// MODULE NARRATIVE
//
//
// This module contains to manage DOS UMBs.
//
// The code in this module should be written entirely in C.
// Do not use any C++ constructs.
//
// This module is portable to:
// DOS 3.X+
// MS Windows 3.X+
// OS/2 2.X+
// OS/2 2.0 PM
// SCO UNIX.
//
// The following compilers are supported:
// MSC 6.0A
// MSC/C++ 7.0
// Borland C++ 3.1 for DOS
// Borland C++ 1.0 for OS/2 2.X
// SCO UNIX cc
//
//----------------------------------------------------------------------------
#include <bs.h>
//----------------------------------------------------------------------------
// Globals
//----------------------------------------------------------------------------
//#if OS_DOS
static BOOL fInit = FALSE;
static int sUmbSave; // Save initial state
//#endif
//----------------------------------------------------------------------------
// Description: Get umb state
// Parameters:
// Returns: UMB state
//----------------------------------------------------------------------------
SHORT FN_E UmbGetState(void)
{
#if OS_DOS
SHORT sUmb;
if (_osmajor < 5 || (_osmajor >= 10 && _osmajor < 20))
return 0;
_asm {
mov ax, 5802h
int 21h
xor ah, ah
mov [sUmb], ax
}
return sUmb;
#else
return 0;
#endif
}
//----------------------------------------------------------------------------
// Description:
// Parameters:
// Returns:
//----------------------------------------------------------------------------
VOID FN_E UmbRestore(void)
{
if (fInit)
{
UmbSetState(sUmbSave);
fInit = FALSE;
}
return ;
}
//----------------------------------------------------------------------------
// Description: Set umb state
// Parameters: sUmb UMB state.
// 1 = Use UMBs
// 0 = Don't use UMBs
// Returns:
//----------------------------------------------------------------------------
VOID FN_E UmbSetState(SHORT sUmb)
{
#if OS_DOS
USHORT usMajor;
Version(&usMajor, NULL);
if (_osmajor < 5 || (_osmajor >= 10 && _osmajor < 20))
return ;
if (EnvCheck("NO_UMB", "YES"))
return ;
if (!fInit)
{
sUmbSave = UmbGetState();
fInit = TRUE;
BaseExitFunc((PFNEXIT)UmbRestore, SYS_EXIT_PRIORITY);
}
sUmb = sUmb ? 1: 0;
_asm {
mov ax, 5803h
mov bx, [sUmb]
int 21h
}
return ;
#else
NOTUSED(sUmb);
return ;
#endif
}
//----------------------------------------------------------------------------
// Description: Run standard test suite
// Parameters: sTest Test to run.
// 0 Run all default tests (except).
// Returns: TRUE if successful.
//----------------------------------------------------------------------------
#if COMPILE_TEST
BOOL FN UmbTest(SHORT sTest)
{
LONG lFree;
LONG lProgram;
NOTUSED(sTest);
Output("UMB enabled.\n");
UmbSetState(1);
ProgramSize(&lProgram, &lFree);
Output("%ld bytes used.\n%ld bytes free. %ld total.\n",
lProgram, lFree, lProgram+lFree);
Output("UMB disabled.\n");
UmbSetState(0);
ProgramSize(&lProgram, &lFree);
Output("%ld bytes used.\n%ld bytes free. %ld total.\n",
lProgram, lFree, lProgram+lFree);
return TRUE;
}
#endif
//----------------------------------------------------------------------------
//------------------------------- End of File --------------------------------
//----------------------------------------------------------------------------